
// 注册用户的处理函数

// 导入db模块
const db = require("../db/index");
// 导入bcrypt
const bcrypt = require("bcryptjs");
//导入jsonwebtoken模块
const jwt = require('jsonwebtoken')
//导入配置文件
const config = require('../config')
exports.regUser = (req, res) => {
  // res.send('reguser OK')
  // 1.获取到客户端提交过来的数据
  const userinfo = req.body;
  //判断数据是否合法
  //console.log(userinfo);
  // if (!userinfo.username || !userinfo.password) {
  //   return res.cc('用户名或者，密码不能为空')
  // }

  const sql = `select * from users where username=?`;

  db.query(sql, [userinfo.username], function (err, data) {
    // 执行 SQL 语句失败
    if (err) {
      return res.cc(err.message)
    }
    // 用户名被占用
    if (data.length > 0) {
      return res.cc("用户名被占用，请更换其他用户名！");
    }
    // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password, 10);
    // console.log(userinfo);

    const sql = 'insert into users set ?'
    db.query(sql, { username: userinfo.username, password: userinfo.password }, (err, data) => {
      // 执行 SQL 语句失败
      if (err) return res.cc(err.message)
      // SQL 语句执行成功，但影响行数不为 1
      if (data.affectedRows !== 1) {
        return res.cc('注册用户失败，请稍后再试！')
      }
      // 注册成功
      res.send({ status: 0, message: '注册成功！' })
    })

  });
}


//登录的处理函数
exports.login = (req, res) => {
  //获取数据req.body
  const userinfo = req.body
  //构造sql语句
  const sql = 'select * from users where username = ?'
  //执行sql语句
  db.query(sql, userinfo.username, (err, data) => {
    //sql语句执行错误
    if (err) return res.cc(err)
    //判断是否有数据 如果没有数据就提示登录失败
    if (data.length === 0) return res.cc('登录失败！')
    //验证客户提交过来的密码与表中的密码对比是否一致
    const flag = bcrypt.compareSync(userinfo.password, data[0].password)
    if (!flag) return res.cc('登录失败！')
    //说明用户名和密码输入正确
    //TODO:登录成功，生成token字符串响应给客户端
    // console.log(data);
    //定义一个变量来保存用户的相关信息，剔除用户密码和用户图像
    const user = { ...data[0], password: '', user_pic: '' }
    //生成token字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '2h' })
    //向客户端响应数据
    res.send({
      status: 0,
      message: '登录成功',
      token: 'Bearer ' + tokenStr
    })

  })
}

